package threads;

public class Daheim {
  // Alles hier ist static, alles gibt's nur einmal.
  static Fernbedienung fernbedienung=new Fernbedienung("Toshiba");
  static Dusche dusche=new Dusche();
  // Die vier folgenden Nachfahren von Person sind anonyme Klassendefinitionen.
  // Man kann also nur genau eine Instanz davon erzeugen, was jeweils auch geschieht.
  static Person mama   =new Person("Cindy", 13870){  // 82-44 Jahre
    @Override
    public void tagewerk(){
      if(Daheim.dusche.seifeDa()) Daheim.dusche.belegen(this, -3000);
      //obige Zeile ist unsicher, da zwischen seifeDa und belegen Lock freigegeben ist
      //dasdauert("Frühstück machen", -3000);
      //dasdauert("frühstücken", -500);
      if(Math.random()>0.3)
        dasdauert("putzen", -5000);
      else{
        dasdauert("Seife einkaufen", 2000);
        Daheim.dusche.addSeife(this, 50000);
      }
      Daheim.fernbedienung.umschalten(2);
      dasdauert("fernsehen", 2000);
      tage--;
    }
  };// Ende der Personendefinition
  static Person papa   =new Person("Bernd", 10585){  // 77-48 Jahre
    @Override
    public void tagewerk(){
      Daheim.dusche.belegen(this, -3000);
      //dasdauert("frühstücken", -500);
      switch(tage%7){
        case 5: dasdauert("havesexwith "+Daheim.mama, -2000); break;
        case 6: dasdauert("kegeln", 5000); break;
        default: dasdauert("arbeiten", 8000); break;
      }
      Daheim.fernbedienung.umschalten(1);
      dasdauert("fernsehen", 2000);
      tage--;
    }
  };// Ende der Personendefinition
  static Person tochter=new Person("Vanessa", 24455){// 82-15 Jahre
    @Override
    public void tagewerk(){
      Daheim.dusche.belegen(this, 5000);
      //dasdauert("frühstücken", -500);
      dasdauert("Schule besuchen", 6000);
      //dasdauert("telefonieren", 6000);
      tage--;
    }
  };// Ende der Personendefinition
  static Person sohn   =new Person("Dennis", 23360){ // 77-13 Jahre
    @Override
    public void tagewerk(){
      Daheim.dusche.belegen(this, -3000);
      //dasdauert("frühstücken", -500);
      dasdauert("Schule besuchen", 6000);
      //dasdauert("Computer spielen", 6000);
      tage--;
    }
  };// Ende der Personendefinition

  public static void mitThreads() {
    new Thread(mama,    "CINDY").start();
    new Thread(papa,    "BERND").start();
    new Thread(tochter, "VANESSA").start();
    new Thread(sohn,    "DENNIS").start();
  }

  public static void ohneThreads(){
    int alive;
    do{
      alive=4;
      if(mama.lebt())    mama.tagewerk();    else alive--;
      if(papa.lebt())    papa.tagewerk();    else alive--;
      if(tochter.lebt()) tochter.tagewerk(); else alive--;
      if(sohn.lebt())    sohn.tagewerk();    else alive--;
    } while(alive>0);
  }

  public static void main(String[] args) {
    //ohneThreads();
    mitThreads();
  }
}
